/**
 * 项目名：admin
 * 包名：com.xuebang.admin.service
 * 文件名：SlideService.java
 * 版本信息：@version 1.0
 * 日期：2014-2-17-下午3:49:25
 */
package com.xuebang.admin.service;

import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.xuebang.admin.dao.Finder;
import com.xuebang.admin.entity.Links;
import com.xuebang.admin.mapper.LinkMapper;

/**
 * 项目名称：admin 类名称：SlideService 类描述： 创建人：xuyang 创建时间：2014-2-17 下午3:49:25
 * 修改人：xuyang 修改时间：2014-2-17 下午3:49:25 修改备注：
 * 
 * @version
 */
@Service
public class LinkService {

	@Inject
	LinkMapper linkMapper;

	@Inject
	Finder finder;

	/**
	 * 展示所有的幻灯片
	 */
	@Transactional(readOnly = true)
	public List<Links> showSlides() {

		return linkMapper.showSlides();
	}
	
	/**
	 * 展示所有的公告
	 */
	@Transactional(readOnly = true)
	public List<Links> showAds() {

		return linkMapper.showAds();
	}

	/**
	 * load
	 */
	@Transactional(readOnly = true)
	public Links loadLink(Integer linkId) {

		return linkMapper.loadLink(linkId);
	}

	/**
	 * 增加
	 */
	@Transactional(rollbackFor = Exception.class)
	public void addLinks(Links link) {
		initSort(link);
		linkMapper.addLinks(link);
	}
	
	/**
	 * 更新
	 */
	@Transactional(rollbackFor = Exception.class)
	public void updateLinks(Links link) {
			linkMapper.updateLinks(link);
	}
	
	

	/**
	 * 更新
	 */
	@Transactional(rollbackFor = Exception.class)
	public void updateLinksItems(Links link) {

		if (link.getSort() == null) {
			initSort(link);
			linkMapper.updateLinks(link);
		} else {
			// 目前 的sort放置的不是其value
			Integer intCurrentIndex = link.getSort();
			// 找出其原来所处的位置
			List<Links> lstLink = null;
			if(link.getType().intValue()==1) {
				lstLink = showSlides();
			} else if(link.getType().intValue()==2){
				lstLink = showAds();
			}
			int intOldIndex = 0;
			int i = 0;
			for (Links tmpLink : lstLink) {
				i++;
				if (tmpLink.getId().intValue() == link.getId().intValue()) {
					intOldIndex = i;
					break;
				}
			}

			if (intOldIndex == intCurrentIndex) {
				link.setSort(lstLink.get(intCurrentIndex-1).getSort());
				linkMapper.updateLinks(link);
				return;
			}
			// 先把目的赋值给原来的
			Integer currentSort = lstLink.get(intCurrentIndex-1).getSort();
			if(intCurrentIndex > intOldIndex){
				for(int j=intCurrentIndex-1;j> intOldIndex-1;j--){
					lstLink.get(j).setSort(lstLink.get(j-1).getSort());
					System.out.println("id:" + lstLink.get(j).getId() +" sort" +lstLink.get(j).getSort());
					linkMapper.updateLinks(lstLink.get(j));
				}
			} else {
				for(int j=intCurrentIndex-1;j<intOldIndex-1;j++){
					lstLink.get(j).setSort(lstLink.get(j+1).getSort());
					System.out.println("id:" + lstLink.get(j).getId() +" sort" +lstLink.get(j).getSort());
					linkMapper.updateLinks(lstLink.get(j));
				}
			}

			link.setSort(currentSort);
			linkMapper.updateLinks(link);
		}
	}

	/**
	 * 删除
	 * 
	 * @param menuColumn
	 */
	@Transactional(rollbackFor = Exception.class)
	public void deleteLinks(String strColumnIDs) {
		linkMapper.deleteLinks(strColumnIDs.split(","));
	}
	/**
	 * 根据id查询
	 * 
	 * @param menuColumn
	 * @return 
	 */
	@Transactional(rollbackFor = Exception.class)
	public List<Links> findLinks(String strColumnIDs) {
		return linkMapper.findLinks(strColumnIDs.split(","));
	}
	/**
	 * 得到幻灯片的数目
	 * 
	 * @param type
	 *            类型
	 */
	@Transactional(readOnly = true)
	public Integer getSlidesNum() {
		return getLinksNum(1);
	}

	/**
	 * 得到幻灯片的数目
	 * 
	 * @param type
	 *            类型
	 */
	@Transactional(readOnly = true)
	public Integer getLinksNum(Integer type) {
		return linkMapper.getLinksNum(type);
	}

	/**
	 * 初始化幻灯片的位置，新添加的默认放置到最前面
	 * 
	 * @param slideLink
	 */
	private void initSort(Links slideLink) {

		if (slideLink.getSort() == null) {
			List<Links> lstLinks = null;
			if(slideLink.getType().intValue()==1){
				lstLinks = showSlides();
			} else if(slideLink.getType().intValue()==2){
				lstLinks = showAds();
			}
			if (lstLinks != null) {
				if (lstLinks.size() == 0) {
					slideLink.setSort(1);
				} else {
					Integer intLastSort = lstLinks.get(0).getSort();
					if (intLastSort == null) {
						slideLink.setSort(lstLinks.size() + 1);
					} else {
						slideLink.setSort(intLastSort + 1);
					}
				}
			}
		}
	}
}
